home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / CPEditText 1.2 / CPEditText.h < prev    next >
Text File  |  1993-10-03  |  8KB  |  211 lines

  1. /******************************************************************************
  2.  CPEditText.h
  3.  
  4.                         Interface for the PEditText Class
  5.      
  6.     SUPERCLASS = CAbstractText
  7.     
  8.     Copyright © 1992-1993 Christopher R. Wysocki.  All rights reserved.
  9.      
  10.  ******************************************************************************/
  11.  
  12. #pragma once                                // Include this file only once
  13.  
  14. /** Includes **/
  15.  
  16. #include <CAbstractText.h>                    // Interface for superclass
  17. #include <Global.h>
  18.  
  19. #include "CPEditTextX.h"                    // Additional constants and macros
  20.  
  21. /** Compilation Constants **/
  22.  
  23. #define        qTCL113                    1        // Set to 1 if using TCL 1.1.3 or later
  24. #define        qPEUseInsertionGap        1        // Set to 0 to not use insertion gap buffer
  25.  
  26. /** Type Definitions **/
  27.  
  28. typedef enum { kBreakLeft, kBreakRight } BreakDirection;
  29.  
  30. /** Class Declaration **/
  31.  
  32. class CPEditText : public CAbstractText {
  33.  
  34.                                 /** Instance Variables **/
  35. protected:
  36.     Handle            itsTextHandle;            // Handle to text to display
  37.     long            itsTextLength;            // Length of text to display
  38.     long            itsNumLines;            // Number of lines in text
  39.     LongHandle        itsLineStarts;            // Offsets to starts of lines
  40. #if qPEUseInsertionGap
  41.     long            itsGapPosition;            // Position of insertion gap
  42.     long            itsGapLength;            // Length of insertion gap
  43. #endif
  44.     short            itsTextFont;            // Font family number for text
  45.     short            itsTextSize;            // Font size for text
  46.     Style            itsTextFace;            // Font style for text
  47.     short            itsTextMode;            // Transfer mode for text
  48.     long            itsSpacingCmd;            // Spacing command for text
  49.     short            itsLineHeight;            // Line height for text
  50.     short            itsFontAscent;            // Ascent for text
  51.     short            itsMaxCharWidth;        // Maximum width of character
  52.     short            itsTabSpaces;            // Number of spaces per tab
  53.     short            itsTabWidth;            // Number of pixels per tab
  54.     long            itsSelStart;            // Start of selection range
  55.     long            itsSelEnd;                // End of selection range
  56.     long            itsSelAnchor;            // Anchor of selection range
  57.     Boolean            fReallyActive;            // Is the pane really active?
  58.     Boolean            fOutlineHilite;            // Outline inactive selection range?
  59.     Boolean            fUseItalicCaret;        // Use italic caret/selection range?
  60.     Boolean            fShowInvisibles;        // Show invisible characters?
  61. #if !qTCL113
  62.     Boolean            scrollHoriz;            // Scroll horizontally?
  63. #endif    
  64. private:
  65.     long            itsClickTime;            // Time of last click
  66.     long            itsCaretTime;            // Time of last caret blink
  67.     long            itsUpDownHOffset;        // Last horiz pixel offset for up/down arrow
  68.     Boolean            fCaretVisible;            // Is the insertion caret visible?
  69.     Boolean            fUpDownArrow;            // Last action up/down arrow key?
  70.  
  71.                                 /** Class Variables **/
  72. protected:
  73.     static CursHandle    cItalicIBeamCursor;    // Italic i-beam cursor
  74.     static RgnHandle    cSaveClipRgn;        // Saved clipping region
  75.     
  76.                                 /** Instance Methods **/            
  77. public:
  78.                                     /** Construction/Destruction **/
  79.     void            IPEditText(CView *anEnclosure, CBureaucrat *aSupervisor,
  80.                                 short aWidth, short aHeight,
  81.                                 short aHEncl, short aVEncl,
  82.                                 SizingOption aHSizing, SizingOption aVSizing);
  83.     virtual void    IViewTemp(CView *anEnclosure, CBureaucrat *aSupervisor,
  84.                                 Ptr viewData);
  85.     virtual void    Dispose(void);
  86.     
  87.                                     /** Display **/
  88.     virtual void    Draw(Rect *area);
  89.     virtual void    Activate(void);
  90.     virtual void    Deactivate(void);
  91.     virtual void    SetSelection(long selStart, long selEnd, Boolean redraw);
  92.     virtual void    HideSelection(Boolean hide, Boolean redraw);
  93.     
  94.                                     /** Scrolling **/
  95.     virtual void    ScrollToSelection(void);
  96.     virtual void    ScrollToOffset(long charOffset);
  97.     
  98.                                     /** Cursor **/
  99.     virtual void    AdjustCursor(Point where, RgnHandle mouseRgn);
  100.     virtual void    Dawdle(long *maxSleep);
  101.     
  102.                                     /** Mouse and Keystroke **/
  103.     virtual void    DoClick(Point hitPt, short modifierKeys, long when);
  104.     virtual Boolean    HitSamePart(Point pointA, Point pointB);
  105.     virtual void    DoKeyDown(char theChar, Byte keyCode, EventRecord *macEvent);
  106.     virtual void    TypeChar(char theChar, short theModifiers);
  107.     virtual void    DoArrowKey(char theChar, short theModifiers);
  108.     
  109.                                     /** Text Specification **/
  110.     virtual void    SetTextPtr(Ptr textPtr, long numChars);
  111.     virtual void    UseTextHandle(Handle textHandle);
  112.     virtual void    InsertTextPtr(Ptr insertPtr, long insertLen, Boolean redraw);
  113.     virtual Handle    CopyTextRange(long start, long end);
  114.     virtual void    DeleteTextRange(long start, long end, Boolean redraw);
  115.     virtual void    ReplaceTextRange(long start, long end, Ptr replacePtr, long replaceLen);
  116.     virtual void    ReplaceSelection(Ptr replacePtr, long replaceLen);
  117.     virtual void    PerformEditCommand(long theCommand);
  118.     
  119.                                     /** Text Characteristics **/
  120.     virtual void    SetFontNumber(short aFontNumber);
  121.     virtual void    SetFontSize(short aSize);
  122.     virtual void    SetFontStyle(short aStyle);
  123.     virtual void    SetTextMode(short aMode);
  124.     virtual void    SetAlignCmd(long anAlignment);
  125.     virtual long    GetAlignCmd(void);
  126.     virtual void    SetSpacingCmd(long aSpacingCmd);
  127.     virtual long    GetSpacingCmd(void);
  128. #if !qTCL113
  129.     void            SetHorizontalScroll(Boolean doHoriz);
  130. #endif
  131.     void            SetTabSpaces(short tabSpaces);
  132.     short            GetTabSpaces(void);
  133.     
  134.                                     /** Display Characteristics **/
  135.     void            SetOutlineHiliting(Boolean outlineHilite);
  136.     void            SetItalicCaret(Boolean useItalicCaret);
  137.     void            SetShowInvisibles(Boolean showInvisibles);
  138.     Boolean            GetShowInvisibles(void);
  139.     
  140.                                     /** Accessing **/
  141.     virtual void    SetBounds(LongRect *aBounds);
  142. #if qTCL113
  143.     virtual void    GetSteps(short *hStep, short *vStep);
  144. #endif
  145.     virtual Handle    GetTextHandle(void);
  146. #if qPEUseInsertionGap
  147.     Handle            GetRawTextHandle(void);
  148. #endif
  149.     virtual long    GetHeight(long startLine, long endLine);
  150.     virtual long    GetCharOffset(LongPt *aPt);
  151.     virtual void    GetCharPoint(long offset, LongPt *aPt);
  152.     virtual void    GetCharStyle(long charOffset, TextStyle *aStyle);
  153.     virtual void    GetTextStyle(short *whichAttributes, TextStyle *aStyle);
  154.     
  155.     virtual long    FindLine(long charPos);
  156.     long            GetLineStart(long line);
  157.     long            GetLineEnd(long line);
  158.     short            GetLineLength(long line);
  159.     virtual long    GetLength(void);
  160.     virtual long    GetNumLines(void);
  161.     virtual void    GetSelection(long *selStart, long *selEnd);
  162.     short            GetChar(long aPosition);
  163.     virtual void    GetCharBefore(long *aPosition, tCharBuf charBuf);
  164.     virtual void    GetCharAfter(long *aPosition, tCharBuf charBuf);
  165.     virtual Boolean    GetWordBounds(long charPos, long *wordStart, long *wordEnd);
  166.     virtual void    GetParagraphBounds(long charPos, long *paraStart, long *paraEnd);
  167. #if qPEUseInsertionGap
  168.     long            GetGapPosition(void);
  169.     long            GetGapLength(void);
  170. #endif
  171.                                     /** Hook Methods **/
  172.     virtual long    WordBreakHook(long charPos, BreakDirection direction);
  173.     virtual void    CaretHook(const Rect *caretRect);
  174.     virtual void    HiliteHook(const Rect *hiliteRect);
  175.     
  176.                                     /** Internal Methods **/
  177. protected:
  178.     void            IPEditTextX(void);
  179.     virtual void    CreateEnvironment(void);
  180.     
  181. #if qPEUseInsertionGap
  182.     void            SetGapPosition(long newGapPosition);
  183.     void            SetGapLength(long newGapLength);
  184.     void            CloseGap(void);
  185. #endif
  186.         
  187.     void            CheckInsertion(Ptr insertPtr, long insertLen, Boolean useSelection,
  188.                                    long *numInsertCRs, long *numSelectionCRs);
  189.     long            CountRangeCRs(long start, long end);
  190.     virtual void    InsertText(Ptr insertPtr, long insertLen, long numInsertCRs, Boolean redraw);
  191.     virtual void    DeleteText(long start, long end, long numDeleteCRs, Boolean redraw);
  192.     virtual void    RefreshTextAfter(long afterPos, Boolean refreshOnlyLine);
  193.     virtual void    DrawLineRange(long startLine, long endLine, long startLineOffset, Boolean erase);
  194.     virtual void    HiliteTextRange(long start, long end);
  195.     virtual short    GetTextWidth(long line, short startPos, short endPos);
  196.     virtual ShortHandle    MeasureLineWidths(long line);
  197.     virtual ShortHandle MeasureTextWidths(long startPos, long endPos, short maxWidth);
  198.     virtual short    ConvertInvisibles(Handle invisH, short numChars);
  199.     
  200.     virtual void    AdjustBounds(void);
  201.     virtual void    CalcLineHeight(void);
  202.     virtual void    CalcTabWidth(void);
  203.     virtual void    CalcLineStarts(void);
  204.     virtual void    AdjustLineStarts(long startChar, long numCharsDelta, long numLinesDelta);
  205.     
  206.     void            DrawCaret(void);
  207.     void            ShowCaret(void);
  208.     void            HideCaret(void);
  209.     void            GetMacFontInfo(FontInfo *macFontInfo);
  210. };
  211.